Load libraries

library(oce)
library(ocedata)
library(tidyverse)
library(readxl)
library(cowplot)
library(gridGraphics)

Load in and check CTD data. Do some QC of oxygen profiles

CAR212_2 (Leg 2 [Omics cruise] of Cariaco-212)

## C212_2 cast 1

# Load in with oce package
C212_2_1 <- read.oce("CTD_data/C212_2_1.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C212_2_1_dc <- ctdTrim(C212_2_1)
# Plot full profile
plot(C212_2_1_dc)

# Plot only oxygen
plotProfile(C212_2_1_dc, ytype = "depth", "oxygen5")

# Correct DO by sensor offset
C212_2_1_dc[["oxygen5"]] <- C212_2_1_dc[["oxygen5"]]-0.3 #I had previously determined these offsets by taking the average DO concentration below the chemocline (where conditions are sulfidic and DO is confidently zero). Check "C212_2_ctd_cor.xlsx" for details.
# Plot again
plotProfile(C212_2_1_dc, ytype = "depth", "oxygen5") 


## C212_2 cast 2

# Load in with oce package
C212_2_2 <- read.oce("CTD_data/C212_2_2.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C212_2_2_dc <- ctdTrim(C212_2_2)
# Plot full profile
plot(C212_2_2_dc)

# Plot only oxygen
plotProfile(C212_2_2_dc, ytype = "depth", "oxygen5")

# Correct DO by sensor offset
C212_2_2_dc[["oxygen5"]] <- C212_2_2_dc[["oxygen5"]]-0.34
# Plot again
plotProfile(C212_2_2_dc, ytype = "depth", "oxygen5") 


## C212_2 cast 3

# Load in with oce package
C212_2_3 <- read.oce("CTD_data/C212_2_3.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C212_2_3_dc <- ctdTrim(C212_2_3)
# Plot full profile
plot(C212_2_3_dc)

# Plot only oxygen
plotProfile(C212_2_3_dc, ytype = "depth", "oxygen5") 

# Correct DO by sensor offset
C212_2_3_dc[["oxygen5"]] <- C212_2_3_dc[["oxygen5"]]-0.31
# Plot again
plotProfile(C212_2_3_dc, ytype = "depth", "oxygen5") 


## C212_2 cast 4

# Load in with oce package
C212_2_4 <- read.oce("CTD_data/C212_2_4.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C212_2_4_dc <- ctdTrim(C212_2_4)
# Plot full profile
plot(C212_2_4_dc)

# Plot only oxygen
plotProfile(C212_2_4_dc, ytype = "depth", "oxygen5") 

# Correct DO by sensor offset
C212_2_4_dc[["oxygen5"]] <- C212_2_4_dc[["oxygen5"]]-0.31
# Plot again
plotProfile(C212_2_4_dc, ytype = "depth", "oxygen5") 


# Plot  oxygen data from all casts on same plot
plotProfile(C212_2_1_dc, ytype = "depth", "oxygen5")
lines(C212_2_2_dc[["oxygen5"]], C212_2_2_dc[["depth"]], col = "red")
lines(C212_2_3_dc[["oxygen5"]], C212_2_3_dc[["depth"]], col = "blue")
lines(C212_2_4_dc[["oxygen5"]], C212_2_4_dc[["depth"]], col = "green")

CAR216_2 (Leg 2 [Omics cruise] of Cariaco-216)

## C216_2 cast 1
There were 26 warnings (use warnings() to see them)
# Load in with oce package
C216_2_1 <- read.oce("CTD_data/C216_2_1.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C216_2_1_dc <- ctdTrim(C216_2_1)
# Plot full profile
plot(C216_2_1_dc)

# Plot only oxygen
plotProfile(C216_2_1_dc, ytype = "depth", "oxygen5")

# Correct DO by sensor offset
C216_2_1_dc[["oxygen5"]] <- C216_2_1_dc[["oxygen5"]]-2.28 #I had previously determined these offsets by taking the average DO concentration below the chemocline (where conditions are sulfidic and DO is confidently zero). Check "C216_2_ctd_cor.xlsx" for details.
# Plot again
plotProfile(C216_2_1_dc, ytype = "depth", "oxygen5") 


## C216_2 cast 2

# Load in with oce package
C216_2_2 <- read.oce("CTD_data/C216_2_2.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C216_2_2_dc <- ctdTrim(C216_2_2)
# Plot full profile
plot(C216_2_2_dc)

# Plot only oxygen
plotProfile(C216_2_2_dc, ytype = "depth", "oxygen5")

# Correct DO by sensor offset
C216_2_2_dc[["oxygen5"]] <- C216_2_2_dc[["oxygen5"]]-2.3
# Plot again
plotProfile(C216_2_2_dc, ytype = "depth", "oxygen5") 


## C216_2 cast 3

# Load in with oce package
C216_2_3 <- read.oce("CTD_data/C216_2_3.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C216_2_3_dc <- ctdTrim(C216_2_3)
# Plot full profile
plot(C216_2_3_dc)

# Plot only oxygen
plotProfile(C216_2_3_dc, ytype = "depth", "oxygen5") 

# Correct DO by sensor offset
C216_2_3_dc[["oxygen5"]] <- C216_2_3_dc[["oxygen5"]]-2.29
# Plot again
plotProfile(C216_2_3_dc, ytype = "depth", "oxygen5") 


## C216_2 cast 4

# Load in with oce package
C216_2_4 <- read.oce("CTD_data/C216_2_4.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this name
# Trim the file to only the downcast
C216_2_4_dc <- ctdTrim(C216_2_4)
# Plot full profile
plot(C216_2_4_dc)

# Plot only oxygen
plotProfile(C216_2_4_dc, ytype = "depth", "oxygen5") 

# Correct DO by sensor offset
C216_2_4_dc[["oxygen5"]] <- C216_2_4_dc[["oxygen5"]]-2.29
# Plot again
plotProfile(C216_2_4_dc, ytype = "depth", "oxygen5") 


# Plot  oxygen data from all casts on same plot
plotProfile(C216_2_1_dc, ytype = "depth", "oxygen5")
lines(C216_2_2_dc[["oxygen5"]], C216_2_2_dc[["depth"]], col = "red")
lines(C216_2_3_dc[["oxygen5"]], C216_2_3_dc[["depth"]], col = "blue")
lines(C216_2_4_dc[["oxygen5"]], C216_2_4_dc[["depth"]], col = "green")

CAR224_2 (Leg 2 [SBU cruise] of Cariaco-224)

## C224_2 cast 1
There were 26 warnings (use warnings() to see them)
# Load in with oce package
C224_1 <- read.oce("CTD_data/C224_1.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this namecannot decode longitude or latitude from '** latitude:'cannot decode longitude or latitude from '** longitude:'
# Trim the file to only the downcast
C224_1_dc <- ctdTrim(C224_1)
# Plot full profile
plot(C224_1_dc)

# Plot only oxygen
plotProfile(C224_1_dc, ytype = "depth", "oxygen6")

# Correct DO by sensor offset
C224_1_dc[["oxygen6"]] <- C224_1_dc[["oxygen6"]]-3.53 #I had previously determined these offsets by taking the average DO concentration below the chemocline (where conditions are sulfidic and DO is confidently zero). Check "C224_ctd_cor.xlsx" for details.
# Plot again
plotProfile(C224_1_dc, ytype = "depth", "oxygen6") 


## C224 cast 2

# Load in with oce package
C224_2 <- read.oce("CTD_data/C224_2.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this namecannot decode longitude or latitude from '** latitude:'cannot decode longitude or latitude from '** longitude:'
# Trim the file to only the downcast
C224_2_dc <- ctdTrim(C224_2)
# Plot full profile
plot(C224_2_dc)

# Plot only oxygen
plotProfile(C224_2_dc, ytype = "depth", "oxygen6")

# Correct DO by sensor offset
C224_2_dc[["oxygen6"]] <- C224_2_dc[["oxygen6"]]-3.53
# Plot again
plotProfile(C224_2_dc, ytype = "depth", "oxygen6") 


## C224 cast 3

# Load in with oce package
C224_3 <- read.oce("CTD_data/C224_3.cnv")
unrecognized SBE name 'E'; consider using 'columns' to define this nameunrecognized SBE name 'E10^-8'; consider using 'columns' to define this nameunrecognized SBE name 'N^2'; consider using 'columns' to define this nameunrecognized SBE name 'N'; consider using 'columns' to define this namecannot decode longitude or latitude from '** latitude:'cannot decode longitude or latitude from '** longitude:'
# Trim the file to only the downcast
C224_3_dc <- ctdTrim(C224_3)
# Plot full profile
plot(C224_3_dc)

# Plot only oxygen
plotProfile(C224_3_dc, ytype = "depth", "oxygen6") 

# Correct DO by sensor offset
C224_3_dc[["oxygen6"]] <- C224_3_dc[["oxygen6"]]-3.82
# Plot again
plotProfile(C224_3_dc, ytype = "depth", "oxygen6") 



# Plot  oxygen data from all casts on same plot
plotProfile(C224_3_dc, ytype = "depth", "oxygen6", col = "blue")
lines(C224_1_dc[["oxygen6"]], C224_1_dc[["depth"]], col = "black")
lines(C224_2_dc[["oxygen6"]], C224_2_dc[["depth"]], col = "red")

Next import grab sample data

LS0tCnRpdGxlOiAiT2NlYW5vZ3JhcGhpYyBQcm9maWxlcyBmb3IgQ2FyaWFjbyBDaGVtb2F1dG90cm9waHkgUGFwZXIiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCkxvYWQgbGlicmFyaWVzCmBgYHtyfQpsaWJyYXJ5KG9jZSkKbGlicmFyeShvY2VkYXRhKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCmxpYnJhcnkoY293cGxvdCkKbGlicmFyeShncmlkR3JhcGhpY3MpCmBgYAoKCiMjIExvYWQgaW4gYW5kIGNoZWNrIENURCBkYXRhLiBEbyBzb21lIFFDIG9mIG94eWdlbiBwcm9maWxlcwoKQ0FSMjEyXzIgKExlZyAyIFtPbWljcyBjcnVpc2VdIG9mIENhcmlhY28tMjEyKQpgYGB7cn0KIyMgQzIxMl8yIGNhc3QgMQoKIyBMb2FkIGluIHdpdGggb2NlIHBhY2thZ2UKQzIxMl8yXzEgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMTJfMl8xLmNudiIpCiMgVHJpbSB0aGUgZmlsZSB0byBvbmx5IHRoZSBkb3duY2FzdApDMjEyXzJfMV9kYyA8LSBjdGRUcmltKEMyMTJfMl8xKQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIxMl8yXzFfZGMpCiMgUGxvdCBvbmx5IG94eWdlbgpwbG90UHJvZmlsZShDMjEyXzJfMV9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpCiMgQ29ycmVjdCBETyBieSBzZW5zb3Igb2Zmc2V0CkMyMTJfMl8xX2RjW1sib3h5Z2VuNSJdXSA8LSBDMjEyXzJfMV9kY1tbIm94eWdlbjUiXV0tMC4zICNJIGhhZCBwcmV2aW91c2x5IGRldGVybWluZWQgdGhlc2Ugb2Zmc2V0cyBieSB0YWtpbmcgdGhlIGF2ZXJhZ2UgRE8gY29uY2VudHJhdGlvbiBiZWxvdyB0aGUgY2hlbW9jbGluZSAod2hlcmUgY29uZGl0aW9ucyBhcmUgc3VsZmlkaWMgYW5kIERPIGlzIGNvbmZpZGVudGx5IHplcm8pLiBDaGVjayAiQzIxMl8yX2N0ZF9jb3IueGxzeCIgZm9yIGRldGFpbHMuCiMgUGxvdCBhZ2FpbgpwbG90UHJvZmlsZShDMjEyXzJfMV9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpIAoKIyMgQzIxMl8yIGNhc3QgMgoKIyBMb2FkIGluIHdpdGggb2NlIHBhY2thZ2UKQzIxMl8yXzIgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMTJfMl8yLmNudiIpCiMgVHJpbSB0aGUgZmlsZSB0byBvbmx5IHRoZSBkb3duY2FzdApDMjEyXzJfMl9kYyA8LSBjdGRUcmltKEMyMTJfMl8yKQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIxMl8yXzJfZGMpCiMgUGxvdCBvbmx5IG94eWdlbgpwbG90UHJvZmlsZShDMjEyXzJfMl9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpCiMgQ29ycmVjdCBETyBieSBzZW5zb3Igb2Zmc2V0CkMyMTJfMl8yX2RjW1sib3h5Z2VuNSJdXSA8LSBDMjEyXzJfMl9kY1tbIm94eWdlbjUiXV0tMC4zNAojIFBsb3QgYWdhaW4KcGxvdFByb2ZpbGUoQzIxMl8yXzJfZGMsIHl0eXBlID0gImRlcHRoIiwgIm94eWdlbjUiKSAKCiMjIEMyMTJfMiBjYXN0IDMKCiMgTG9hZCBpbiB3aXRoIG9jZSBwYWNrYWdlCkMyMTJfMl8zIDwtIHJlYWQub2NlKCJDVERfZGF0YS9DMjEyXzJfMy5jbnYiKQojIFRyaW0gdGhlIGZpbGUgdG8gb25seSB0aGUgZG93bmNhc3QKQzIxMl8yXzNfZGMgPC0gY3RkVHJpbShDMjEyXzJfMykKIyBQbG90IGZ1bGwgcHJvZmlsZQpwbG90KEMyMTJfMl8zX2RjKQojIFBsb3Qgb25seSBveHlnZW4KcGxvdFByb2ZpbGUoQzIxMl8yXzNfZGMsIHl0eXBlID0gImRlcHRoIiwgIm94eWdlbjUiKSAKIyBDb3JyZWN0IERPIGJ5IHNlbnNvciBvZmZzZXQKQzIxMl8yXzNfZGNbWyJveHlnZW41Il1dIDwtIEMyMTJfMl8zX2RjW1sib3h5Z2VuNSJdXS0wLjMxCiMgUGxvdCBhZ2FpbgpwbG90UHJvZmlsZShDMjEyXzJfM19kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpIAoKIyMgQzIxMl8yIGNhc3QgNAoKIyBMb2FkIGluIHdpdGggb2NlIHBhY2thZ2UKQzIxMl8yXzQgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMTJfMl80LmNudiIpCiMgVHJpbSB0aGUgZmlsZSB0byBvbmx5IHRoZSBkb3duY2FzdApDMjEyXzJfNF9kYyA8LSBjdGRUcmltKEMyMTJfMl80KQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIxMl8yXzRfZGMpCiMgUGxvdCBvbmx5IG94eWdlbgpwbG90UHJvZmlsZShDMjEyXzJfNF9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpIAojIENvcnJlY3QgRE8gYnkgc2Vuc29yIG9mZnNldApDMjEyXzJfNF9kY1tbIm94eWdlbjUiXV0gPC0gQzIxMl8yXzRfZGNbWyJveHlnZW41Il1dLTAuMzEKIyBQbG90IGFnYWluCnBsb3RQcm9maWxlKEMyMTJfMl80X2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW41IikgCgojIFBsb3QgIG94eWdlbiBkYXRhIGZyb20gYWxsIGNhc3RzIG9uIHNhbWUgcGxvdApwbG90UHJvZmlsZShDMjEyXzJfMV9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpCmxpbmVzKEMyMTJfMl8yX2RjW1sib3h5Z2VuNSJdXSwgQzIxMl8yXzJfZGNbWyJkZXB0aCJdXSwgY29sID0gInJlZCIpCmxpbmVzKEMyMTJfMl8zX2RjW1sib3h5Z2VuNSJdXSwgQzIxMl8yXzNfZGNbWyJkZXB0aCJdXSwgY29sID0gImJsdWUiKQpsaW5lcyhDMjEyXzJfNF9kY1tbIm94eWdlbjUiXV0sIEMyMTJfMl80X2RjW1siZGVwdGgiXV0sIGNvbCA9ICJncmVlbiIpCmBgYAoKCgpDQVIyMTZfMiAoTGVnIDIgW09taWNzIGNydWlzZV0gb2YgQ2FyaWFjby0yMTYpCmBgYHtyfQojIyBDMjE2XzIgY2FzdCAxCgojIExvYWQgaW4gd2l0aCBvY2UgcGFja2FnZQpDMjE2XzJfMSA8LSByZWFkLm9jZSgiQ1REX2RhdGEvQzIxNl8yXzEuY252IikKIyBUcmltIHRoZSBmaWxlIHRvIG9ubHkgdGhlIGRvd25jYXN0CkMyMTZfMl8xX2RjIDwtIGN0ZFRyaW0oQzIxNl8yXzEpCiMgUGxvdCBmdWxsIHByb2ZpbGUKcGxvdChDMjE2XzJfMV9kYykKIyBQbG90IG9ubHkgb3h5Z2VuCnBsb3RQcm9maWxlKEMyMTZfMl8xX2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW41IikKIyBDb3JyZWN0IERPIGJ5IHNlbnNvciBvZmZzZXQKQzIxNl8yXzFfZGNbWyJveHlnZW41Il1dIDwtIEMyMTZfMl8xX2RjW1sib3h5Z2VuNSJdXS0yLjI4ICNJIGhhZCBwcmV2aW91c2x5IGRldGVybWluZWQgdGhlc2Ugb2Zmc2V0cyBieSB0YWtpbmcgdGhlIGF2ZXJhZ2UgRE8gY29uY2VudHJhdGlvbiBiZWxvdyB0aGUgY2hlbW9jbGluZSAod2hlcmUgY29uZGl0aW9ucyBhcmUgc3VsZmlkaWMgYW5kIERPIGlzIGNvbmZpZGVudGx5IHplcm8pLiBDaGVjayAiQzIxNl8yX2N0ZF9jb3IueGxzeCIgZm9yIGRldGFpbHMuCiMgUGxvdCBhZ2FpbgpwbG90UHJvZmlsZShDMjE2XzJfMV9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpIAoKIyMgQzIxNl8yIGNhc3QgMgoKIyBMb2FkIGluIHdpdGggb2NlIHBhY2thZ2UKQzIxNl8yXzIgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMTZfMl8yLmNudiIpCiMgVHJpbSB0aGUgZmlsZSB0byBvbmx5IHRoZSBkb3duY2FzdApDMjE2XzJfMl9kYyA8LSBjdGRUcmltKEMyMTZfMl8yKQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIxNl8yXzJfZGMpCiMgUGxvdCBvbmx5IG94eWdlbgpwbG90UHJvZmlsZShDMjE2XzJfMl9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpCiMgQ29ycmVjdCBETyBieSBzZW5zb3Igb2Zmc2V0CkMyMTZfMl8yX2RjW1sib3h5Z2VuNSJdXSA8LSBDMjE2XzJfMl9kY1tbIm94eWdlbjUiXV0tMi4zCiMgUGxvdCBhZ2FpbgpwbG90UHJvZmlsZShDMjE2XzJfMl9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpIAoKIyMgQzIxNl8yIGNhc3QgMwoKIyBMb2FkIGluIHdpdGggb2NlIHBhY2thZ2UKQzIxNl8yXzMgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMTZfMl8zLmNudiIpCiMgVHJpbSB0aGUgZmlsZSB0byBvbmx5IHRoZSBkb3duY2FzdApDMjE2XzJfM19kYyA8LSBjdGRUcmltKEMyMTZfMl8zKQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIxNl8yXzNfZGMpCiMgUGxvdCBvbmx5IG94eWdlbgpwbG90UHJvZmlsZShDMjE2XzJfM19kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNSIpIAojIENvcnJlY3QgRE8gYnkgc2Vuc29yIG9mZnNldApDMjE2XzJfM19kY1tbIm94eWdlbjUiXV0gPC0gQzIxNl8yXzNfZGNbWyJveHlnZW41Il1dLTIuMjkKIyBQbG90IGFnYWluCnBsb3RQcm9maWxlKEMyMTZfMl8zX2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW41IikgCgojIyBDMjE2XzIgY2FzdCA0CgojIExvYWQgaW4gd2l0aCBvY2UgcGFja2FnZQpDMjE2XzJfNCA8LSByZWFkLm9jZSgiQ1REX2RhdGEvQzIxNl8yXzQuY252IikKIyBUcmltIHRoZSBmaWxlIHRvIG9ubHkgdGhlIGRvd25jYXN0CkMyMTZfMl80X2RjIDwtIGN0ZFRyaW0oQzIxNl8yXzQpCiMgUGxvdCBmdWxsIHByb2ZpbGUKcGxvdChDMjE2XzJfNF9kYykKIyBQbG90IG9ubHkgb3h5Z2VuCnBsb3RQcm9maWxlKEMyMTZfMl80X2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW41IikgCiMgQ29ycmVjdCBETyBieSBzZW5zb3Igb2Zmc2V0CkMyMTZfMl80X2RjW1sib3h5Z2VuNSJdXSA8LSBDMjE2XzJfNF9kY1tbIm94eWdlbjUiXV0tMi4yOQojIFBsb3QgYWdhaW4KcGxvdFByb2ZpbGUoQzIxNl8yXzRfZGMsIHl0eXBlID0gImRlcHRoIiwgIm94eWdlbjUiKSAKCiMgUGxvdCAgb3h5Z2VuIGRhdGEgZnJvbSBhbGwgY2FzdHMgb24gc2FtZSBwbG90CnBsb3RQcm9maWxlKEMyMTZfMl8xX2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW41IikKbGluZXMoQzIxNl8yXzJfZGNbWyJveHlnZW41Il1dLCBDMjE2XzJfMl9kY1tbImRlcHRoIl1dLCBjb2wgPSAicmVkIikKbGluZXMoQzIxNl8yXzNfZGNbWyJveHlnZW41Il1dLCBDMjE2XzJfM19kY1tbImRlcHRoIl1dLCBjb2wgPSAiYmx1ZSIpCmxpbmVzKEMyMTZfMl80X2RjW1sib3h5Z2VuNSJdXSwgQzIxNl8yXzRfZGNbWyJkZXB0aCJdXSwgY29sID0gImdyZWVuIikKYGBgCgoKCkNBUjIyNF8yIChMZWcgMiBbU0JVIGNydWlzZV0gb2YgQ2FyaWFjby0yMjQpCmBgYHtyfQojIyBDMjI0XzIgY2FzdCAxCgojIExvYWQgaW4gd2l0aCBvY2UgcGFja2FnZQpDMjI0XzEgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMjRfMS5jbnYiKQojIFRyaW0gdGhlIGZpbGUgdG8gb25seSB0aGUgZG93bmNhc3QKQzIyNF8xX2RjIDwtIGN0ZFRyaW0oQzIyNF8xKQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIyNF8xX2RjKQojIFBsb3Qgb25seSBveHlnZW4KcGxvdFByb2ZpbGUoQzIyNF8xX2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW42IikKIyBDb3JyZWN0IERPIGJ5IHNlbnNvciBvZmZzZXQKQzIyNF8xX2RjW1sib3h5Z2VuNiJdXSA8LSBDMjI0XzFfZGNbWyJveHlnZW42Il1dLTMuNTMgI0kgaGFkIHByZXZpb3VzbHkgZGV0ZXJtaW5lZCB0aGVzZSBvZmZzZXRzIGJ5IHRha2luZyB0aGUgYXZlcmFnZSBETyBjb25jZW50cmF0aW9uIGJlbG93IHRoZSBjaGVtb2NsaW5lICh3aGVyZSBjb25kaXRpb25zIGFyZSBzdWxmaWRpYyBhbmQgRE8gaXMgY29uZmlkZW50bHkgemVybykuIENoZWNrICJDMjI0X2N0ZF9jb3IueGxzeCIgZm9yIGRldGFpbHMuCiMgUGxvdCBhZ2FpbgpwbG90UHJvZmlsZShDMjI0XzFfZGMsIHl0eXBlID0gImRlcHRoIiwgIm94eWdlbjYiKSAKCiMjIEMyMjQgY2FzdCAyCgojIExvYWQgaW4gd2l0aCBvY2UgcGFja2FnZQpDMjI0XzIgPC0gcmVhZC5vY2UoIkNURF9kYXRhL0MyMjRfMi5jbnYiKQojIFRyaW0gdGhlIGZpbGUgdG8gb25seSB0aGUgZG93bmNhc3QKQzIyNF8yX2RjIDwtIGN0ZFRyaW0oQzIyNF8yKQojIFBsb3QgZnVsbCBwcm9maWxlCnBsb3QoQzIyNF8yX2RjKQojIFBsb3Qgb25seSBveHlnZW4KcGxvdFByb2ZpbGUoQzIyNF8yX2RjLCB5dHlwZSA9ICJkZXB0aCIsICJveHlnZW42IikKIyBDb3JyZWN0IERPIGJ5IHNlbnNvciBvZmZzZXQKQzIyNF8yX2RjW1sib3h5Z2VuNiJdXSA8LSBDMjI0XzJfZGNbWyJveHlnZW42Il1dLTMuNTMKIyBQbG90IGFnYWluCnBsb3RQcm9maWxlKEMyMjRfMl9kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNiIpIAoKIyMgQzIyNCBjYXN0IDMKCiMgTG9hZCBpbiB3aXRoIG9jZSBwYWNrYWdlCkMyMjRfMyA8LSByZWFkLm9jZSgiQ1REX2RhdGEvQzIyNF8zLmNudiIpCiMgVHJpbSB0aGUgZmlsZSB0byBvbmx5IHRoZSBkb3duY2FzdApDMjI0XzNfZGMgPC0gY3RkVHJpbShDMjI0XzMpCiMgUGxvdCBmdWxsIHByb2ZpbGUKcGxvdChDMjI0XzNfZGMpCiMgUGxvdCBvbmx5IG94eWdlbgpwbG90UHJvZmlsZShDMjI0XzNfZGMsIHl0eXBlID0gImRlcHRoIiwgIm94eWdlbjYiKSAKIyBDb3JyZWN0IERPIGJ5IHNlbnNvciBvZmZzZXQKQzIyNF8zX2RjW1sib3h5Z2VuNiJdXSA8LSBDMjI0XzNfZGNbWyJveHlnZW42Il1dLTMuODIKIyBQbG90IGFnYWluCnBsb3RQcm9maWxlKEMyMjRfM19kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNiIpIAoKCiMgUGxvdCAgb3h5Z2VuIGRhdGEgZnJvbSBhbGwgY2FzdHMgb24gc2FtZSBwbG90CnBsb3RQcm9maWxlKEMyMjRfM19kYywgeXR5cGUgPSAiZGVwdGgiLCAib3h5Z2VuNiIsIGNvbCA9ICJibHVlIikKbGluZXMoQzIyNF8xX2RjW1sib3h5Z2VuNiJdXSwgQzIyNF8xX2RjW1siZGVwdGgiXV0sIGNvbCA9ICJibGFjayIpCmxpbmVzKEMyMjRfMl9kY1tbIm94eWdlbjYiXV0sIEMyMjRfMl9kY1tbImRlcHRoIl1dLCBjb2wgPSAicmVkIikKYGBgCgoKIyMgTmV4dCBpbXBvcnQgZ3JhYiBzYW1wbGUgZGF0YQo=